package cn.com.surker.oa.dao;

import cn.com.surker.oa.entity.OaSupplier;
import cn.com.surker.oa.entity.OaSupplierDetail;
import cn.com.surker.oa.vo.OaSupplierVo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sun.imageio.plugins.common.I18N;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 供应商 Mapper 接口
 * </p>
 *
 * @author admin
 * @since 2022-10-05
 */
public interface OaSupplierDao extends BaseMapper<OaSupplier> {

	/**
	 * 分页查询供应商信息
	 * @param page
	 * @param queryWrapper
	 * @param <E>
	 * @return
	 */
	<E extends IPage<OaSupplierVo>> E findOrgPage(E page,
		@org.apache.ibatis.annotations.Param(Constants.WRAPPER) Wrapper<OaSupplier> queryWrapper);

	/**
	 * 查询供应商关联公司的信息
	 * @param supplierId
	 * @return
	 */
	List<Map<String, Object>> findRelationOrg(Long supplierId, Integer type);
	/**
	 * 查询关联供应商的信息
	 * @param type
	 * @param supplierId
	 * @return
	 */
	List<Map<String, Object>> findRelationSupplier(Integer type, Long supplierId);

	/**
	 * 根据公司信息及类型查询供应商
	 * @param orgId
	 * @param type
	 * @return
	 */
	List<OaSupplier> queryByOrgV1(Long orgId, Integer type);

    /**
     * 根据关联公司查询供应商信息
     * @return
     */
    List<OaSupplier> queryByOrg();

    /**
     * 查询是否包含ERP数据信息
     * @param orgId 工厂ID
     * @param erpId erp主键ID
     * @param code 供应商code码
     * @param name 供应商全称
     * @return
     */
    OaSupplier queryErpInfo(Long orgId, Integer erpId, String code, String name);

    /**
     *查询是否包含ERP数据信息
     * @param orgId 工厂I D
     * @param code 供应商code码
     * @param name 供应商全称
     * @return
     */
    Integer queryExistInfo(Long orgId, String code, String name);

	/**
	 * 查询详细信息,包含一对多的以列表形式返回
	 *
	 * @return
	 */
	List<OaSupplierDetail> findDetailList();

	/**
	 * 查询是否存在供应商
	 *
	 * @param code            社会信用码
	 * @param name            供应商名
	 * @return
	 */
	OaSupplier queryOaData(String code, String name);

	/**
	 * 查询详细信息
	 *
	 * @param objectPage
	 * @param query
	 * @return
	 */
	IPage<OaSupplier> selectDetailPage(Page<Object> objectPage, @Param(Constants.WRAPPER) QueryWrapper<OaSupplier> query);

	/**
	 * 查询供应商联系人
	 * @return
	 */
	List<Map<String, Object>> findLinkMan();
}
